home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / bell212.arc / DDIAL4.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-07-25  |  10.8 KB  |  255 lines

  1.        TITL ' TMS7041 MODEM DIALER CODE  '
  2.        IDT  'TONE'
  3.        OPTION XREF,TUNLST
  4. ************************************************************
  5. **  This code processes a 320 tone/pulse  dial command.   **
  6. **                                                        **
  7. **  Written by Peter Ehlig                                **
  8. **                                                        **
  9. **  Revision  1.0   11/12/85  PETER EHLIG                 **
  10. **  Revision  1.1   05/20/85  PETER EHLIG                 **
  11. **                                                        **
  12. **  COPYRIGHT TEXAS INSTRUMENTS, 07/25/86                 **
  13. **                                                        **
  14. ************************************************************
  15. *
  16. *   DEFINITIONS AND REFERENCES
  17.        DEF  TONE,DB,MSDLY,SECDLY,INT1,INT2,RUNHSA
  18.        REF  PRINT,TOP,B212,B103,RUNANS,RNANS2,RANSM,GO320
  19. *
  20.        PAGE
  21. *
  22.        COPY DTE2.EQU
  23. *******----------------------------------------*******
  24. *****             Dial Blind                     *****
  25. *******----------------------------------------*******
  26. *
  27. *   ENTRY POINT FOR OPERATION WITH 320 DIALER
  28. TONE   EQU   $
  29.        OR    %BIT6,SWSTAT   ; set status to blind dial
  30.        MOVP  %>2A,IOCNT0    ; disable RI interrupt
  31.        ORP   %BIT0,BPORT    ; ENABLE CODEC
  32. *      ORP   %BIT0,CPORT    ; turn off CTS_
  33.        ORP   %>8C,APORT     ; originate mode,
  34.        CALL  @TONED         ; CALL TONE DIALING ROUTINE
  35. OVRDB  EQU    $
  36.        ORP    %BIT2,BPORT    ; DE-ACTIVATE FILTER CHIP ALB
  37.        ORP    %BIT0,BPORT    ; ENABLE CODEC
  38.        MOVP   %>3F,DDDR      ; SETUP DPORT FOR OUTPUT
  39.        MOVP   %>3D,DPORT     ; RUN 300BPS MODEM W/O XMT
  40.        ANDP   %NOT6,BPORT    ; LATCH DATA INTO XMT.BUF
  41.        ORP    %BIT6,BPORT    ; AND RESET READ ACK
  42.        MOVP   %>00,DDDR      ; RESET DPORT AS INPUT
  43. IBRSP  BTJOP  %BIT6,DPORT,IBRSP   ; WAIT FOR 320 RESPONSE
  44.        MOVD   %ICALM,MSGL         ; STATE CALL INITIATED
  45.        CALL   @PRINT              ; AND SEND IT
  46.        CLR    MSGM          ; initialize carrier abort timer
  47.        CLR    MSGL           ;
  48.        CLR    CWT1           ; TO BE ABOUT 2 MINUTES
  49.        CLR    CWT2           ;
  50. W320   BTJOP  %BIT7,DPORT,W320   ; WAIT FOR 320 WRITE
  51.        MOVP   %0,DDDR            ; REVERSE PORT DIRECTION
  52.        ANDP   %NOT7,BPORT        ; RESET WRITE STROBE
  53.        MOVP   DPORT,A            ; LINE FROM 320
  54.        ORP    %BIT7,BPORT        ; BY TOGGLING
  55.        AND    %>3F,A             ; MASK OFF UNDEFINED BITS
  56.        CMP    %>31,A             ; IS THERE CARRIER DETECT
  57.        JNZ    OVCNT0             ; IF NOT = THEN SKIP DELAY
  58.        INC    MSGL               ; AFTER 8 READS WITH ACTIVE
  59.        BTJO   %BIT3,MSGL,GOTDCD  ; CARRIER RUN MODEM
  60. OVCNT0 INC    CWT1               ; INCREMENT FIRST STAGE
  61.        JNC    W320               ; COUNTER
  62.        INC    CWT2               ; INCREMENT SECOND STAGE
  63.        JNC    W320               ; COUNTER
  64. SQUEL  ANDP   %NOT7,APORT     ; GO ON HOOK
  65.        MOVP   %>1C,APORT     ; ORG MODE, OFF HOOK
  66.        ANDP   %NOT0,CPORT     ; ACTIVATE CTS
  67.        BR     @TOP            ; RETURN TO COMMAND HANDLER
  68. *
  69. GOTDCD AND    %NOT6,SWSTAT
  70.        BTJZ   %BIT7,SWSTAT,B103A ; check for modem type
  71.        CLR    A               ; SQUELCH THE 300 BPS
  72.        MOVP   %>3F,DDDR       ; TURN COMMAND BUFFER OUT
  73.        MOVP   %>00,DPORT      ; CLEAR COMMAND
  74.        ANDP   %NOT6,BPORT     ; TOGGLE READ ACKNOWLEDGE
  75.        ORP    %BIT6,BPORT     ; LINE TO RESET
  76.        MOVP   %>00,DDDR       ; TURN COMMAND BUFFER IN
  77. IBRSP2 BTJOP  %BIT6,DPORT,IBRSP2  ; WAIT FOR 320 RESPONSE
  78.        BR     @B212           ; RUN AT 1200BPS
  79. *
  80. B103A  EQU    $
  81.        MOVD   %RUNSL,MSGL     ; ACKNOWLEDGE HOOKUP
  82.        CALL   @PRINT          ; BY MESSAGE
  83.        BR     @B103           ; RUN AT 300BPS
  84. *
  85.        PAGE
  86. *******----------------------------------------*******
  87. *****   TONED - LET 320 GENERATE THE DIGIT TONES *****
  88. *******----------------------------------------*******
  89. TONED  EQU   $
  90.        MOVD  %4000,MSTIME     ; set wait period for 2 sec
  91.        CALL  @MSDLY           ; and wait
  92.        MOV   %1,B
  93. TONXD  LDA   @COMBUF(B)       ; load subcommand/digit
  94.        CMP   %ZERO,A          ; is it the last command
  95.        JNE   MORDIG           ; no, continue
  96.        RETS                   ; yes, return
  97. MORDIG INC   B                ; bove pointer to  next digit
  98.        CMP   %'0',A           ; check less than '0'
  99.        JL    NOTDIG           ; yes, not a digit
  100.        CMP   %'9'+1,A         ; check > 9
  101.        JHS   NOTDIG           ; yes, get next digit
  102.        SUB   %'0',A           ; convert ascii to integ
  103.        BR    @SNDTON          ; no, send digit to 320
  104. NOTDIG CMP   %'+',A           ; if digit = ,
  105.        JEQ   TPAUSE           ; then pause
  106. SPCDIG BR    @TONXD           ; get next digit
  107. *
  108. TPAUSE MOV   %2,VALUE         ; delay at least 2 sec
  109.        CALL  @SECDLY          ; wait
  110.        BR    @TONXD           ; and get next digit
  111. *
  112. SNDTON EQU   $
  113.        CMP   %>44,CMDCHR     ; IS IT TONE DIAL
  114.        JNE   DTMF1           ; YES, DIAL IT DTMF
  115.        BR    @PULSE          ; ELSE, DIAL IT PULSE
  116. DTMF1  MOVP  %>3F,DDDR       ; setup DPORT for output
  117.        OR    %>10,A          ; set to dial command mode
  118.        MOVP  A,DPORT         ; send the digit to be dialed
  119.        ANDP  %NOT6,BPORT     ; latch output to 320
  120.        ORP   %BIT6,BPORT     ; and reset read status
  121.        MOVP  %>00,DDDR       ; TURN DPORT IN
  122. TONELP BTJOP %BIT6,DPORT,TONELP   ; wait for 320 response
  123.        MOVP  %>3F,DDDR       ; set up D0-D5 as outputs
  124.        ANDP  %>C0,DPORT      ; clear out the command
  125.        ANDP  %NOT6,BPORT     ; Latch data into xmt.buffer
  126.        ORP   %BIT6,BPORT     ; and reset RACK
  127.        MOVP  %>00,DDDR       ; TURN DPORT IN
  128.        MOVD  %140,MSTIME     ; set delay for 140ms
  129.        CALL  @MSDLY          ; and wait
  130.        BR    @TONXD          ; get next digit
  131. *
  132. PULSE  EQU   $
  133.        CMP   %0,A            ; IS IT ZERO DIGIT
  134.        JNE   PULSE1          ; NO, SKIP ADJUST
  135.        MOV   %10,A           ; ELSE SET TO 10 PULSES
  136. PULSE1 ANDP  %NOT7,APORT     ; PUT IT ON-HOOK
  137.        MOVD  %61,MSTIME      ; SET DELAY FOR 61MS
  138.        CALL  @MSDLY          ; AND WAIT
  139.        ORP   %BIT7,APORT     ; TAKE OFF-HOOK
  140.        MOVD  %40,MSTIME      ; SET DELAY FOR 40MS
  141.        CALL  @MSDLY          ; AND WAIT
  142.        DEC   A               ; DECREMENT PULSE COUNT
  143.        JZ    LSTPUL          ; IF ZERO THEN DONE
  144.        JMP   PULSE1          ; ELSE NEXT PULSE
  145. LSTPUL MOVD  %800,MSTIME     ; SET DELAY FOR 800MS
  146.        CALL  @MSDLY          ; AND WAIT
  147.        BR    @TONXD          ; GET THE NEXT DIGIT
  148. *
  149.        PAGE
  150. *******----------------------------------------*******
  151. ***** MSDLY - Wait MSTIME number of milliseconds *****
  152. *******----------------------------------------*******
  153. MSDLY  EQU    $
  154.        MOV    %CNTVAL,DELYR1    ; load the inner counter (9)
  155. HERE2  DJNZ   DELYR1,HERE2      ; (9+2)
  156.        DECD   MSTIME            ; (11)
  157.        JC     MSDLY             ; (7)
  158.        RETS
  159. *******----------------------------------------*******
  160. *****   SECDLY - Wait VALUE number of seconds    *****
  161. *******----------------------------------------*******
  162. SECDLY CMP    %0,VALUE
  163.        JEQ    NODLY
  164. NXTSEC MOVD   %1001,MSTIME
  165.        CALL   @MSDLY
  166.        DJNZ   VALUE,NXTSEC
  167. NODLY  RETS
  168. ********************************************************
  169.        PAGE
  170. INT1   EQU   $
  171. RIWAIT ORP   %BIT1,IOCNT0         ; CLEAR EDGE LATCH
  172.        BTJOP %BIT1,IOCNT0,RIWAIT  ; WAIT FOR end of ring
  173. *
  174.        BTJZ  %BIT1,SWSTAT,NOANS   * IS AUTO-ANSWER ENABLED
  175.        MOVD  %GOTCAL,MSGL         * PRINT 'RECEIVED CALL'
  176.        CALL  @PRINT
  177.        POP   A
  178.        POP   A
  179.        POP   ST
  180.        ORP   %BIT0,CPORT          * DISABLE CD TO DTE
  181.        ORP   %BIT1,CPORT          * ALSO DSR
  182.        MOVP  %>0A,IOCNT0          * CLEAR INT FLAGS,DISABLE
  183.        EINT
  184.        BTJO  %BIT7,SWSTAT,ANS12   * ANSWER 1200 BPS MODEM
  185.        BR    @RUNANS              * RUN BELL 103 MODEM
  186. NOANS  RETI                       *
  187. *
  188. ANS12  EQU   $
  189. RIHIGH ORP   %BIT1,IOCNT0         ; CLEAR EDGE LATCH
  190.        BTJOP %BIT1,IOCNT0,RIHIGH  ; WAIT FOR end of ring
  191.        ORP   %BIT2,BPORT        ; DE-ACTIVE FILTER CHIP ALB
  192.        ORP   %BIT0,BPORT        ; ENABLE CODEC
  193.        ORP   %BIT7,APORT        ; TAKE IT OFF HOOK
  194.        MOVP  %>3F,DDDR          ; SETUP DPORT FOR OUTPUT
  195.        MOVP  %>3C,DPORT      ; SET 212 ANS/W. ANS.TONE CMND
  196.        ANDP  %NOT6,BPORT       ; Latch data into xmt.buffer
  197.        ORP   %BIT6,BPORT       ; and reset RACK
  198.        MOVP  %>00,DDDR         ; turn DPORT in
  199. IB212A BTJOP %BIT6,DPORT,IB212A ; CHECK 320 RESPONSE
  200.        MOVD  %RANSM,MSGL        ; GET CONFIRMATION MESG
  201.        CALL  @PRINT             ; AND SEND IT
  202.        CLR   MSGM               ; INITIALIZE THE CARRIER
  203.        CLR   MSGL               ; ABORT TIMER COUNTER
  204.        CLR   CWT1               ; TO BE ABOUT
  205.        MOV   %>FF,CWT2          ; 1.7 seconds
  206. IB212B BTJOP %BIT7,DPORT,IB212B ; WAIT FOR RESPONSE FROM 320
  207.        MOVP  %0,DDDR            ; REVERSE PORT DIRECTION
  208.        ANDP  %NOT7,BPORT        ; ENABLE LATCH READ
  209.        MOVP  DPORT,A            ; AND READ IT
  210.        ORP   %BIT7,BPORT        ; RESET ACKNOWLEDGE BIT
  211.        AND   %>3F,A             ; MASK OFF UNDEFINED BITS
  212.        CMP   %>31,A             ; IS THERE CARRIER DETECT
  213.        JNZ   OVRCNT             ; IF NOT THEN SKIP DELAY
  214.        INC   MSGL               ; AFTER 8 READS WITH ACTIVE
  215.        BTJO  %BIT3,MSGL,GOT212  ; CARRIER, RUN MODEM
  216. OVRCNT INC   CWT1               ; INCREMENT 1ST STAGE
  217.        JNC   IB212B             ; COUNTER
  218.        INC   CWT2               ; INCREMENT 2ND STAGE
  219.        JNC   IB212B             ; COUNTER
  220.        ANDP  %NOT0,CPORT        ; ACTIVATE CTS
  221.        BR    @RNANS2            ; RETRY 103 ANSWER MODE
  222. GOT212 EQU   $
  223.        MOVP  %>3F,DDDR          ; SETUP DPORT FOR OUTPUT
  224.        MOVP  %>30,DPORT         ; SET 212 ANS MODE MODEM
  225.        ANDP  %NOT6,BPORT       ; Latch data into xmt.buffer
  226.        ORP   %BIT6,BPORT       ; and reset RACK
  227.        MOVP  %>00,DDDR         ; TURN DPORT IN
  228. IB212C BTJOP %BIT6,DPORT,IB212C ; CHECK 320 RESPONSE AND
  229.        MOVD  %RUNHSA,MSGL       ; ACKNOWLEDGE HOOKUP
  230.        CALL  @PRINT             ; BY MESSAGE
  231.        BR    @GO320             ; RUN DSP COMM ROUTINE
  232. *
  233. GOTCAL TEXT 'RECEIVED CALL'
  234.        BYTE >0A,>0D,0
  235. RUNHSA TEXT 'ANSWER MODEM LINKED AT 1200BPS'
  236.        BYTE >0A,>0D,0
  237. INT2   EQU  $                  ; ABORT TIMER LATER
  238.        RETI
  239. *-------
  240. DB     RETS
  241.        PAGE
  242. *******----------------------------------------*******
  243. *****    screen messages - text statements       *****
  244. *******----------------------------------------*******
  245. CONN3  TEXT   'CONNECT 300'
  246.        BYTE   0
  247. *
  248. ICALM  TEXT   'CALL INITIATED'
  249.        BYTE   0
  250. *
  251. RUNSL  TEXT   '300BPS MODEM RUNNING '
  252.        BYTE   0
  253. *
  254.        END
  255.